/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uniriotec.pm.prova.control;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import uniriotec.pm.prova.api.DisciplinaService;
import uniriotec.pm.prova.api.TopicoService;
import uniriotec.pm.prova.dto.DisciplinaDTO;
import uniriotec.pm.prova.dto.TopicoDTO;
import uniriotec.pm.prova.model.Topico;
import uniriotec.pm.prova.util.ServiceUtil;

/**
 *
 * @author Alberto
 */
public class TopicoServlet extends HttpServlet {
    
	private static final long serialVersionUID = 1L;
        
        protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
                String comando = request.getParameter("comando");
                
		if (comando == null) 
                   response.sendRedirect("listAll.jsp");
                else if (comando.equals("inserir"))
                   this.inserir(request, response);
                else if (comando.equals("busca4remover"))
                    this.buscarRemover(request, response);
	        else if (comando.equals("remover"))
                   this.remover(request, response);                   
                else if (comando.equals("listar"))
                   this.listar(request, response);
                else if (comando.equals("buscar")) 
                    this.buscar(request, response);
                else if (comando.equals("busca4alterar"))
                    this.buscarAlterar(request, response);
                else if (comando.equals("busca4inserir"))
                    this.buscarInserir(request, response);        
                else if (comando.equals("alterar"))
                    this.alterar(request, response);
	}
        
        
        private void inserir(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
        
                TopicoService service = ServiceUtil.getServiceFactory().getTopicoService();
		  String disciplinaId = request.getParameter("disciplinaid");
		  String nome = request.getParameter("nome");
                  if ("".equals(disciplinaId) || "".equals(nome)) {
			response.sendRedirect("pages/topico/error.jsp?tituloPagina=Inserir Topico&mensagem=Id ou Nome n�o preenchido!");
			} else {
				Topico topico = new Topico();
                                topico.setDisciplinaId(Integer.parseInt(disciplinaId));
                                topico.setNome(nome);
                                
				
		
                                 try {
					
                                       service.create(new TopicoDTO(topico));                                    						
					response
							.sendRedirect("/gera-prova/sDisciplina?comando=listarTopicos&disciplinaid="+disciplinaId);
				
				} catch (Exception e) {
					response
							.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=erro na altera��o! Detalhe: "
									+ e);
				}
                                 
                                 
                                 
                               
			}

        }
        private void remover(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
            
                        TopicoService service = ServiceUtil.getServiceFactory().getTopicoService();
            		try {
			     
                             service.remove(Integer.parseInt(request.getParameter("id")));
                             response.sendRedirect("/gera-prova/sTopico?comando=listar");
			     }
                            catch (Exception e) {
			    response.sendRedirect("pages/topico/error.jsp?tituloPagina=Remover Topico&mensagem=erro na remo��o! Detalhe: "
										+ e);
			}
				
			 

        }
        private void listar(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
                        
                        TopicoService service = ServiceUtil.getServiceFactory().getTopicoService();
			try {
                        int disciplinaId = Integer.parseInt(request.getParameter("disciplinaId"));
                         ArrayList<TopicoDTO> listaTopico = (ArrayList<TopicoDTO>) service.listAll();
			 request.setAttribute("lista_topicos", listaTopico);
                	 RequestDispatcher rd = request.getRequestDispatcher("pages/topico/listAll.jsp");
			 rd.forward(request, response);
			} catch (Exception e) {
			  response.sendRedirect("pages/topico/error.jsp?tituloPagina=Listagem de Topicos! Detalhe: "+ e);
			}

        }
        private void buscar(HttpServletRequest request,
			HttpServletResponse response)throws ServletException, IOException{
                        
                        TopicoService service = ServiceUtil.getServiceFactory().getTopicoService();
			String idParam = request.getParameter("codigo");

			if ("".equals(idParam)) {
				response
						.sendRedirect("pages/topico/error.jsp?tituloPagina=Buscar Topico&mensagem=Id n�o preenchido!");
			} else {
			

				try {
					TopicoDTO topico= service.searchById(Integer.parseInt(idParam));
					if (topico == null) {
						response
								.sendRedirect("pages/topico/error.jsp?tituloPagina=Buscar Topico&mensagem=N�o foi poss�vel encontrar topico!");
					} else {
                                            ArrayList<TopicoDTO> listaTopico = new ArrayList<TopicoDTO>();
                                            listaTopico.add(topico);
			                    request.setAttribute("lista_topicos", listaTopico);
                	                    RequestDispatcher rd = request.getRequestDispatcher("pages/topico/listAll.jsp");
				            rd.forward(request, response);
					}

				} catch (NumberFormatException e) {
					response
							.sendRedirect("pages/topico/error.jsp?tituloPagina=Buscar Topico&mensagem=Entrada inv�lida!");
				} catch (Exception e) {
					response
							.sendRedirect("pages/topico/error.jsp?tituloPagina=Buscar Topico&mensagem=erro na busca! Detalhe: "
									+ e);
				}
			}

        }
        
        private void buscarInserir(HttpServletRequest request,
			HttpServletResponse response)throws ServletException, IOException{
            
                        DisciplinaService service = ServiceUtil.getServiceFactory().getDisciplinaService();
			String disciplinaid = request.getParameter("disciplinaid");

			if ("".equals(disciplinaid)) {
				response.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=Id n�o preenchido!");
			} else {
			try {
			  DisciplinaDTO disciplina = service.searchById(Integer.parseInt(disciplinaid));
			 if (disciplina == null) {
			   response.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=N�o foi poss�vel encontrar topico!");
					} else {
						request.setAttribute("disciplina", disciplina);

						RequestDispatcher rd = request
								.getRequestDispatcher("pages/topico/create.jsp");
						rd.forward(request, response);
					}

				} catch (NumberFormatException e) {
					response
							.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=Entrada inv�lida!");
                                } catch (Exception e) {
					response
							.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=erro na busca! Detalhe: "
									+ e);
				}
			}
        }

        private void buscarAlterar(HttpServletRequest request,
			HttpServletResponse response)throws ServletException, IOException{
            
                        TopicoService service = ServiceUtil.getServiceFactory().getTopicoService();
			String idParam = request.getParameter("id");

			if ("".equals(idParam)) {
				response.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=Id n�o preenchido!");
			} else {
			try {
			  TopicoDTO topico = service.searchById(Integer.parseInt(idParam));
			 if (topico == null) {
			   response.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=N�o foi poss�vel encontrar topico!");
					} else {
						request.setAttribute("topico", topico);

						RequestDispatcher rd = request
								.getRequestDispatcher("pages/topico/update.jsp");
						rd.forward(request, response);
					}

				} catch (NumberFormatException e) {
					response
							.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=Entrada inv�lida!");
                                } catch (Exception e) {
					response
							.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=erro na busca! Detalhe: "
									+ e);
				}
			}
        }
        private void buscarRemover(HttpServletRequest request,
			HttpServletResponse response)throws ServletException, IOException{
            
                        TopicoService service = ServiceUtil.getServiceFactory().getTopicoService();
			String idParam = request.getParameter("id");

			if ("".equals(idParam)) {
				response.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=Id n�o preenchido!");
			} else {
			try {
			  TopicoDTO topico = service.searchById(Integer.parseInt(idParam));
			 if (topico == null) {
			   response.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=N�o foi poss�vel encontrar topico!");
					} else {
						request.setAttribute("topico", topico);

						RequestDispatcher rd = request
								.getRequestDispatcher("pages/topico/remove.jsp");
						rd.forward(request, response);
					}

				} catch (NumberFormatException e) {
					response
							.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=Entrada inv�lida!");
                                } catch (Exception e) {
					response
							.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=erro na busca! Detalhe: "
									+ e);
				}
			}
        }
        
        private void alterar(HttpServletRequest request,
			HttpServletResponse response)throws ServletException, IOException{
            
            TopicoService service = ServiceUtil.getServiceFactory().getTopicoService();
            String disciplinaId = request.getParameter("disciplinaId");
	    String topicoId = request.getParameter("topicoId");
	    String nome = request.getParameter("nome");
           if ("".equals(disciplinaId) || "".equals(nome)) {
		response.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=Id ou Nome n�o preenchido!");

			} else {

				TopicoDTO topico =service.searchById(Integer.parseInt(topicoId));
				topico.setDisciplinaId(Integer.parseInt(disciplinaId));
				topico.setNome(nome);
                                topico.setQuestoes(null);


				try {
					
                                       service.update(topico);                                    						
					response
							.sendRedirect("/gera-prova/sTopico?comando=listar");
				
				} catch (Exception e) {
					response
							.sendRedirect("pages/topico/error.jsp?tituloPagina=Alterar Topico&mensagem=erro na altera��o! Detalhe: "
									+ e);
				}
			}
        }
	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public TopicoServlet() {
		super();
	}


	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	
}
